package com.xl;

import java.util.logging.ConsoleHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

// 自定义日志格式类
import java.util.logging.Formatter;
import java.util.logging.LogRecord;

public class JulExample {
    // 获取一个Logger实例，命名为"com.example.JulExample"
    private static final Logger logger = Logger.getLogger(JulExample.class.getName());

    public static void main(String[] args) {
        // JUL基本使用：通过Logger.getLogger()获取Logger实例,记录不同级别的日志
        logger.setLevel(Level.ALL);  // 设置Logger的级别为ALL，以便输出所有级别的日志
        logger.severe("这是一个严重错误日志");
        logger.warning("这是一个警告日志");
        logger.info("这是一个信息日志");
        logger.fine("这是一个精细日志");
        logger.finer("这是一个更精细日志");
        logger.finest("这是一个最精细日志");

        // 日志核心内容：添加ConsoleHandler并设置SimpleFormatter来自定义日志输出格式
        ConsoleHandler consoleHandler = new ConsoleHandler();
        SimpleFormatter simpleFormatter = new SimpleFormatter();
        consoleHandler.setFormatter(simpleFormatter);
        logger.addHandler(consoleHandler);

        // 再次记录日志，查看自定义格式的效果
        logger.info("自定义格式后的信息日志");

        // 日志继承关系示例
        Logger parentLogger = Logger.getLogger("com.example");
        parentLogger.setLevel(Level.WARNING);
        // com.example.JulExample的Logger继承自com.example的Logger
        // 所以当设置parentLogger的级别为WARNING时，低于该级别的日志不会输出
        logger.fine("由于继承关系，这条精细日志不会输出");


        // 日志默认配置：展示默认配置下的日志输出情况
        // 注释掉上面自定义的Handler和相关设置，恢复默认配置
        // logger.removeHandler(consoleHandler);
        // 再次记录日志，查看默认格式
        logger.info("默认配置下的信息日志");

        // 自定义日志格式：创建一个自定义的日志格式类
        CustomFormatter customFormatter = new CustomFormatter();
        ConsoleHandler customHandler = new ConsoleHandler();
        customHandler.setFormatter(customFormatter);
        logger.addHandler(customHandler);
        logger.info("自定义格式（自定义类）的信息日志");

        // 第三方框架兼容性：模拟与SLF4J的兼容性（仅示例，实际需要桥接器等）
        // 实际使用中可能需要桥接器等组件来更好地协同工作
        // 这里简单打印表明在一个项目中可以同时存在不同日志框架
        System.out.println("在项目中可以同时使用JUL和第三方日志框架如SLF4J等");
    }
}

// 创建自定义的Formatter子类CustomFormatter，实现个性化的日志输出格式
class CustomFormatter extends Formatter {
    @Override
    public String format(LogRecord record) {
        return "[" + record.getLevel() + "] " +
                record.getLoggerName() + ": " +
                record.getMessage() + "\n";
    }
}
